package com.shxzz.shortlink.project.dao.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.shxzz.shortlink.project.dao.entity.LinkAccessLogDO;
import com.shxzz.shortlink.project.dao.entity.LinkAccessStatusDO;
import com.shxzz.shortlink.project.dto.req.GroupLinkAccessRecordReqDTO;
import com.shxzz.shortlink.project.dto.req.GroupLinkStatusReqDTO;
import com.shxzz.shortlink.project.dto.req.LinkAccessRecordReqDTO;
import com.shxzz.shortlink.project.dto.req.LinkStatusReqDTO;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;
import java.util.Map;

/**
 * @author shxzz
 * @create 2023-12-26-23:02
 * @description 短链接访问日志持久层
 */
@Mapper
public interface LinkAccessLogMapper extends BaseMapper<LinkAccessLogDO> {
    /**
     * 查询指定日期范围短链接高频访问 IP
     * @param linkStatusReqDTO 查询参数
     * @return 前 5 高频 IP 信息
     */
    List<Map<String, Object>> selectTopIpList(LinkStatusReqDTO linkStatusReqDTO);

    /**
     * 查询指定日期范围短链接访客类型信息
     * @param linkStatusReqDTO 查询参数
     * @return 访客类型统计结果
     */
    List<Map<String, Object>> selectUvTypeList(LinkStatusReqDTO linkStatusReqDTO);

    /**
     * 查询指定日期范围短链接 PV、UV、UIP
     * @param linkStatusReqDTO 查询参数
     * @return 统计结果
     */
    LinkAccessStatusDO selectTotalPvUvUip(LinkStatusReqDTO linkStatusReqDTO);

    /**
     * 查询指定日期范围短链接访问记录
     * @param linkAccessRecordReqDTO 分页查询参数
     * @return 访问记录分页结果
     */
    LinkAccessRecordReqDTO selectPageAccessRecord(LinkAccessRecordReqDTO linkAccessRecordReqDTO);

    /**
     * 查询指定日期范围短链接分组访问记录
     * @param groupLinkAccessRecordReqDTO 分页查询参数
     * @return 分组访问记录分页结果
     */
    IPage<LinkAccessLogDO> selectPageGroupAccessRecord(GroupLinkAccessRecordReqDTO groupLinkAccessRecordReqDTO);

    /**
     * 查询指定日期范围短链接分组 PV、UV、UIP
     * @param groupLinkStatusReqDTO 查询参数
     * @return 分组统计结果
     */
    LinkAccessStatusDO selectGroupTotalPvUvUip(GroupLinkStatusReqDTO groupLinkStatusReqDTO);

    /**
     * 查询短链接分组指定日期范围短链接高频访问 IP
     * @param groupLinkStatusReqDTO 短链接分组查询参数
     * @return 短链接分组前 5 高频 IP 信息
     */
    List<Map<String, Object>> selectGroupTopIpList(GroupLinkStatusReqDTO groupLinkStatusReqDTO);

    /**
     * 查询短链接分组指定日期范围短链接访客类型信息
     * @param groupLinkStatusReqDTO 短链接分组查询参数
     * @return 短链接分组访客类型统计结果
     */
    List<Map<String, Object>> selectGroupUvTypeList(GroupLinkStatusReqDTO groupLinkStatusReqDTO);
}
